package com.qianxun.module.base.bo;

import com.qianxun.module.datasource1.admin.entity.SysUser;
import com.qianxun.plugins.shiro.ShiroUtil;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * 数据操作信息字段
 * @author: huwei
 * @date: 2019/10/24 11:00
 * @version: 1.0.0
 */
@Data
@Accessors(chain = true)
public class OptionInfo extends OptionDateTimeInfo implements Serializable {
    /**
     * 创建人key 创建人的唯一标识
     */
    protected String createdKey;
    /**
     * 创建人name 创建人的名称
     */
    protected String createdName;
    /**
     * 更新人key 更新人的唯一标识
     */
    protected String updatedKey;
    /**
     * 更新人 更新人名称
     */
    protected String updatedName;

    @Override
    public void init(){
        super.init();
        initUpdateInfo();
        initCreateInfo();
    }

    public void initUpdateInfo(){
        super.initUpdatedTime();
        UserInfo userInfo = currentOrSystemUserInfo();
        this.updatedKey = userInfo.getUserKey();
        this.updatedName = userInfo.getUsername();
    }

    public void initCreateInfo(){
        super.initCreatedTime();
        UserInfo userInfo = currentOrSystemUserInfo();
        this.createdKey = userInfo.getUserKey();
        this.createdName = userInfo.getUsername();
    }

    private UserInfo currentOrSystemUserInfo(){
        UserInfo userInfo = null;
        try {
            if(ShiroUtil.isLogin(SysUser.class)) {
                SysUser sysUser = ShiroUtil.getUser(SysUser.class);
                userInfo = new UserInfo(sysUser.getId() ,sysUser.getName() ,sysUser.getUuid(),sysUser.getUsername());
            }
        }catch (Throwable e){
            //防止shiro 不可用异常
        }
        return userInfo == null ? UserInfo.systemUserInfo() : userInfo;
    }
}
